package cn.sylinx.common.ext.enums;

public final class EnumUtil {

	/**
	 * 通过值获取对应枚举
	 * 
	 * @param value
	 * @param enums
	 * @return
	 */
	public static <K, V, T extends Enum<K, V>> T getByValue(V value, T[] enums) {
		return getByValue(value, enums, true);
	}

	/**
	 * 通过值获取对应枚举
	 * 
	 * @param value
	 * @param enums
	 * @param exception
	 *            如果没找到是否抛出异常
	 * @return
	 */
	public static <K, V, T extends Enum<K, V>> T getByValue(V value, T[] enums, boolean exception) {

		for (T rt : enums) {

			if (rt.getValue().equals(value)) {
				return rt;
			}
		}

		if (exception) {
			throw new IllegalArgumentException("参数错误");
		}

		return null;
	}

	/**
	 * 通过键获取对应枚举
	 * 
	 * @param key
	 * @param enums
	 * @return
	 */
	public static <K, V, T extends Enum<K, V>> T getByKey(K key, T[] enums) {
		return getByKey(key, enums, true);
	}

	/**
	 * 通过键获取对应枚举
	 * 
	 * @param key
	 * @param enums
	 * @return
	 */
	public static <K, V, T extends Enum<K, V>> T getByKey(K key, T[] enums, boolean exception) {

		for (T rt : enums) {

			if (rt.getKey().equals(key)) {
				return rt;
			}
		}

		if (exception) {
			throw new IllegalArgumentException("参数错误");
		}

		return null;
	}

}
